package com.feihong.txgw.inter.contract.order;

import com.feihong.txgw.json.user.AllOrderInfo;
import com.feihong.txgw.model.base_bean.BaseResponse;
import com.feihong.txgw.ui.mvp.model.IBaseModel;
import com.feihong.txgw.ui.mvp.precenter.AbBasePrecenter;
import com.feihong.txgw.ui.mvp.view.IBaseFragment;

import java.util.List;

import io.reactivex.Observable;

/**
 * @Author wangziheng
 * @ProjectName txgw_app
 * @ClassName IOrderContract
 * @package com.feihong.txgw.inter.contract.order
 * @data 2018/5/7 10:33
 * @Describe
 * @Change
 */
public interface IOrderContract {

    interface IOrderMainView extends IBaseFragment{
        /**
         * 加载数据正常返回
         * @param isFullPage 数据是否满一页
         * @param orderInfo
         */
        void loadOrderResult(boolean isFullPage, List<AllOrderInfo.DataBean.OrderPageBean> orderInfo);

        /**
         * @param warningMsg  无数据时的提示
         */
        void loadEnd(String warningMsg);

        /**
         * 其他数据错误
         * @param errorMsg
         */
        void loadOtherError(String errorMsg);

        /**
         * item状态变化
         * @param orderPageBean  改变后的item实体类
         * @param isNotifyRemoveItem  是否删除此item
         * @param nullDataWarnning  如果要删除的item是最后一条数据 , 暂无数据的提示语
         */
        void notifyItemChange(AllOrderInfo.DataBean.OrderPageBean orderPageBean,boolean isNotifyRemoveItem,String nullDataWarnning);
    }

    interface IOrderMainModel extends IBaseModel{
        /**
         * 请求订单列表
         * @param pageNum
         * @param orderStatus  订单状态
         */
        Observable<AllOrderInfo> getOrderInfo(String pageNum, int orderStatus);

        /**
         * 订单操作
         * @param url
         * @param orderSn
         * @param orderType
         * @return
         */
        Observable<BaseResponse> orderOpration(String url,String orderSn,String orderType);

    }

    abstract class AbOrderMainPrecenter extends AbBasePrecenter<IOrderMainModel,IOrderMainView>{


        public abstract void loadOrderInfo(int ordreStatus);

        /**
         * 首次加载列表
         * @param orderStatus
         */
        public abstract void loadOrderInfoFirst(int orderStatus);

        /**
         * item点击
         * @param orderInfo
         * @param itemPosition  下标
         */
        public abstract void onItemClick(AllOrderInfo.DataBean.OrderPageBean orderInfo,int itemPosition);

        /**
         *  "取消"  按钮点击
         * @param orderInfo
         */
        public abstract void onCancelBtnClick(AllOrderInfo.DataBean.OrderPageBean orderInfo);

        /**
         *   "确认"  按钮点击
         * @param orderInfo
         */
        public abstract void onConfirmBtnClick(AllOrderInfo.DataBean.OrderPageBean orderInfo);
    }
}
